Python是一门非常优秀的编程语言,由于其语法简介、易学易用,越来越受到编程人员的喜爱。相对于Python在数据分析、人工智能等领域中的发展,在数据可视化方面的发展相对有些滞后。最经典的Python可视化绘图库莫过于Matplotlib,就是MATLAB+Plot+Library,即绘图风格模仿MATLAB的绘图库。但由于其风格有些偏古典,Python开源社区开发了Seaborn绘图模块,本质上是对Matplotlib的封装,绘图效果更符合现代人的审美观。尽管如此仍然存在一个很大的缺陷:是一个静态的绘图模块,绘制出的图像是静态的,就像打开一张图片一样,没有交互式效果。因此Plotly应运而生,是一个基于JavaScript的动态绘图模块,绘制出来的图像与我们在网页上看到的动态交互式绘图效果是一样的。默认的绘图结果是一个HTML网页文件,通过浏览器就可以查看,并且易于分享,是GitHub开源网站目前最火的绘图工具,但在国内的知名度却不是很高。
Plotly项目的创始人是Alex Johnson,是哈佛大学物理博士。该项目的参与者中有一位华裔女性,叫Baobao Zhang,是耶鲁大学政治学博士。Plotly项目团队在2013年就已经拿到数百万美元的投资,在加拿大注册了公司,名字是科学数据云服务公司。Plotly公司有很多大牌客户,比如西门子、Google、美国国家航天局NASA、美国空军、华盛顿邮报等等。
Plotly底层使用的是plotly.js(所有的图形、数据和互动都是通过JavaScript函数完成的),支持Python、R、MATLAB、JavaScript这四种语言的扩展。Plotly原本是收费软件,于2016年提供了绘图模块库的免费社区版本,并增加了Python等多种编程语言的接口,以及离线模式支持。Python绘图模块库内置的图形类型非常丰富,可以通过访问官网https://plot.ly/python/ 查看。
Anaconda是一个专门用于统计和机器学习的IDE工具(Integrated Development Environment,集成开发环境),它集成了Python和许多基础的库,并且可以很好管理安装环境和各种工具包,省去许多复杂的配置过程。(不需要提前安装Python,找到Anaconda安装目录中Scripts文件夹,复制路径添加至环境变量Path中即可配置Python环境)
运行Anaconda Promote(annaconda开发环境下的命令提示符)
conda --versionpython --versionconda listpip install plotly 或 pip install plotly==4.12 或 pip install plotly --upgrade(更新)# 1-1 Sample with Matplotlib
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2, 100)
plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()
# 1-2 Sample with Plotly
# 导入所需的模块
import plotly.graph_objects as go
import numpy as np
x = np.linspace(0,2,100)
# 使用go.Figure()函数创建一个图形fig
fig = go.Figure()
# 使用add_trace()函数向fig中添加trace(画轨、画迹、画痕)
fig.add_trace(go.Scatter(x=x,y=x,name='linear'))
fig.add_trace(go.Scatter(x=x,y=x**2,name='quadratic'))
fig.add_trace(go.Scatter(x=x,y=x**3,name='cubic'))
# 使用update_layout()函数设置fig的画面布局
fig.update_layout(
title='Simple Plot',
xaxis=dict(title='x label'),
yaxis=dict(title='y label'))
# 将图形fig输出
fig.show()
Plotly绘图模块一般称一个基本绘图对象为trace(画轨、画迹、画痕),每个trace都可以由Plotly模块库里面的graph_objects子模块的各类对象(Scatter、Bar、Line、Pie等)来定义。从上一例题可以总结出Plotly的基本绘图流程:
import plotly.graph_objects as go;go.Figure()函数创建一个图形fig:若该图像有多个trace,建议暂不传递参数,进行下一步;也可以直接向data参数传递绘图对象(建议一个trace时使用,多个trace需以列表形式传递);add_trace()函数向fig中添加trace;update_layout()函数设置fig的画面布局(比如标题、X\Y轴标题等);fig.show()。